package cn.tedu.csmall.cart.webapi.controller;

import cn.tedu.csmall.cart.service.ICartService;
import cn.tedu.csmall.commons.pojo.cart.dto.CartAddDTO;
import cn.tedu.csmall.commons.restful.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/base/cart")
@Api(tags = "购物车管理模块")
public class CartController {

    // 装配业务逻辑层接口
    @Autowired
    private ICartService cartService;

    @PostMapping("/add")
    @ApiOperation("新增商品信息到购物车")
    public JsonResult cartAdd(CartAddDTO cartAddDTO){
        cartService.cartAdd(cartAddDTO);
        return JsonResult.ok("新增商品到购物车完成!");
    }

    // 装配远程调用需要的RestTemplate对象
    @Autowired
    private RestTemplate restTemplate;
    @PostMapping("/delete")
    @ApiOperation("删除购物车中的商品信息")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户Id",name="userId",example = "UU100"),
            @ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100")
    })
    public JsonResult deleteUserCart(String userId,String commodityCode){
        cartService.deleteUserCart(userId,commodityCode);
        // 上面删除了购物车商品,下面开始调用减少库存
        // 学习套路:发起RestTemplate远程调用前,先声明要请求的url路径
        // 下面url中nacos-stock是目标模块注册到Nacos的名称
        // 如果不能调用成功,换成具体的ip:端口即可,例如localhost:20003
        String url="http://nacos-stock/base/stock/reduce/count?" +
                "commodityCode={1}&reduceCount={2}";
        // url确定之后才能发起调用
        // 参数解释:
        // 第一个参数:请求的url
        // 第二个参数:返回值类型的反射,方法的返回值会转换为这个类型
        // 第三个参数开始: 如果url中有{1},{2}这样的占位符的话
        //           第三个参数赋值给{1},第四个参数赋值给{2},以此类推
        JsonResult jsonResult=restTemplate.getForObject(
                url,JsonResult.class,commodityCode,5);
        System.out.println(jsonResult);
        return JsonResult.ok("删除购物车商品完成!");
    }


}






